package model

import org.junit.Before
import org.junit.Test

import static org.junit.Assert.*
import org.junit.After

class PersonajeTest {
	
	var Villano villano
	var Villano otroVillano
	val String hobbie1 = "Le gusta navegar."
	val String hobbie2 = "Disfruta escalar."
	val String senha1 = "Pelo rojo."
	val String senha2 = "Le encantan las hamburguesas."
	
	@Before
	def void setUp(){
		 villano = new Villano()
		 villano.setNombre("Carmen Sandiego")
		 otroVillano = new Villano()
		 otroVillano.setNombre("Miss Fortune")		
	}
	
	@After
	def void tearDown(){
		this.vaciarListaDeHobbies
		this.vaciarListaDeSenhas
	}
	
	/**
	 * Mensaje con proposito de Tests.
	 * Proposito: Elimina todos los Hobbies de un Villano.
	 * Nota: Se puede invocar el método #clean también en cambio de re-instanciar.
	 */ 
	def vaciarListaDeHobbies(){
		this.villano.hobbies.clear
	}
	
	/**
	 * Mensaje con proposito de Tests.
	 * Proposito: Elimina todas las Senhas de un Villano.
	 * Nota: Se puede invocar el método #clean también en cambio de re-instanciar.
	 */ 
	def vaciarListaDeSenhas(){
		this.villano.senhas.clear
	}
	
	
	@Test
	def agregarHobbieAVillanoTest(){
		this.villano.agregarHobbie(hobbie1)
		
		assertEquals("Deberia tener un Hobbie", this.villano.hobbies.size, 1)
	}
	
	@Test
	def quitarHobbieAVillanoTest(){
		this.villano.agregarHobbie(hobbie1)
		this.villano.agregarHobbie(hobbie2)
		this.villano.quitarHobbie(hobbie1)
		assertEquals("Deberia tener un Hobbie", this.villano.hobbies.size, 1)
	}
	
	@Test
	def agregarSenhaAVillanoTest(){
		this.villano.agregarSenhaParticular(senha1)
		this.villano.agregarSenhaParticular(senha2)
		
		assertEquals("Deberia tener dos senhas", this.villano.senhas.size, 2)
	}
	
	@Test
	def quitarSenhaAVillanoTest(){
		this.villano.agregarSenhaParticular(senha1)
		this.villano.quitarSenhaParticular(senha1)
		assertEquals("No deberia tener senhas", this.villano.senhas.size, 0)
	}	
	
	@Test
	def dosVillanosSonDiferentes(){
		assertFalse("Debería dar false, son dos villanos diferentes", this.villano.equals(otroVillano))
	}
}